﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using PCDoctor.SQLite;
using PCDoctor.Utils;

namespace PCDoctor.ScanParameters
{
    //Класс-шлюз к хранилищу параметров сканирования
    public class ScanParameterDBGateway
    {
        /// <summary>
        /// Возвращает результат выполнения запроса query к базе SQLite
        /// </summary>
        /// <param name="query">Строка SQL запроса</param>
        /// <returns>DataTable</returns>
        protected DataTable get(string query)
        {
            DataTable table = null;
            try
            {
                var db = new SQLiteDatabase();
                table = db.GetDataTable(query);
            }
            catch (Exception fail)
            {
                ErrorHandler.HandleError(fail.Message);
            }
            return table;
        }

        /// <summary>
        /// Возвращает список проблем возможного типа (сеть, система, файлы)
        /// </summary>
        /// <param name="kind">Тип проблемы</param>
        /// <returns>DataTable</returns>
        public DataTable getAll(int kind)
        {
            String query = "SELECT parameters.id, problem_id, name, fixer_kind, problem_kind, path, value " +
                "FROM parameters " +
                "INNER JOIN problems_parameters ON problems.id = problems_parameters.problem_id " +
                "INNER JOIN problems ON parameters.id = problems_parameters.parameter_id " +
                "WHERE problems.problem_kind = " + kind.ToString();
            return get(query);
        }

        /// <summary>
        /// Вовзращает полный список возможных проблем
        /// </summary>
        /// <returns>DataTable</returns>
        public DataTable getAll()
        {
            String query = "SELECT parameters.id, problem_id, name, fixer_kind, problem_kind, path, value " +
                "FROM parameters " +
                "INNER JOIN problems_parameters ON problems.id = problems_parameters.problem_id " +
                "INNER JOIN problems ON parameters.id = problems_parameters.parameter_id " +
                "WHERE problems.problem_kind != 4";
            return get(query);
        }

        /// <summary>
        /// Вовзращает список оптимизаций для игрового режима
        /// </summary>
        /// <returns>DataTable</returns>
        public DataTable getGaming()
        {
            String query = "SELECT parameters.id, problem_id, name, fixer_kind, problem_kind, path, value " +
                "FROM parameters " +
                "INNER JOIN problems_parameters ON problems.id = problems_parameters.problem_id " +
                "INNER JOIN problems ON parameters.id = problems_parameters.parameter_id " +
                "WHERE problems.problem_kind = 4";
            return get(query);
        }
    }
}
